package cn.jltx.remoteviewspro;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.NotificationCompat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RemoteViews;

import java.io.File;

public class NotificationActivity extends AppCompatActivity implements View.OnClickListener{
    private Button btn1;
    private Button btn2;
    private Button btn3;
    private Button btn4;
    private Button btn5;
    private Button btn6;
    private Button btn7;

    private static int sId = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification);
        initView();
    }

    private void initView(){
        btn1 = (Button)this.findViewById(R.id.btn1);
        btn2 = (Button)this.findViewById(R.id.btn2);
        btn3 = (Button)this.findViewById(R.id.btn3);
        btn4 = (Button)this.findViewById(R.id.btn4);
        btn5 = (Button)this.findViewById(R.id.btn5);
        btn6 = (Button)this.findViewById(R.id.btn6);
        btn7 = (Button)this.findViewById(R.id.btn7);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);
        btn6.setOnClickListener(this);
        btn7.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn1:
                showNormalNotification();
                break;
            case R.id.btn2:
                showSimpleRemoteViewNotification();
                break;
            case R.id.btn3:
                break;
            case R.id.btn4:
                break;
            case R.id.btn5:
                break;
            case R.id.btn6:
                break;
            case R.id.btn7:
                break;
            default:
                break;
        }
    }


    /**
     * 获取提示信息的触发响应的intent
     * @param intent
     * @param flags
     * @return
     */
    private PendingIntent getDefalutIntent(Intent intent,int flags){
        PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, intent, flags);
        return pendingIntent;
    }

    /**
     *显示普通的通知栏
     */
    private void showNormalNotification() {
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //获取状态通知栏管理
        Intent intent = new Intent(this, DemoActivity_2.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,
                0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//            Notification.Builder builder = new Notification.Builder(this);  //最低版本不能低于11
        NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());  //为了兼容到2.3版本使用v7或者v4该消息提示Build
        builder.setSmallIcon(R.mipmap.ic_launcher) //设置通知小ICON
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.icon1))  //设置通知栏里面左边的大图标
                .setTicker("hello world")    //通知首次出现在通知栏，带上升动画效果的
                .setWhen(System.currentTimeMillis()) //通知产生的时间，会在通知信息里显示，一般是系统获取到的时间
                .setContentTitle("titile:"+sId) //设置通知栏标题
                .setContentText("this is notification.") //设置通知栏显示内容
                .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级
                .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS)
                .setLights(0xff00ff00, 300, 1000)
//                .setOngoing(false)//ture，设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
              //  .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
              //  .setDeleteIntent()  //当用户点击全部清除按钮时，响应该清除事件的Intent
              //  .setFullScreenIntent() //响应紧急状态的全屏事件（例如来电事件），也就是说通知来的时候，跳过在通知区域点击通知这一步，直接执行fullScreenIntent代表的事件
                .setContentIntent(getDefalutIntent(intent, PendingIntent.FLAG_UPDATE_CURRENT));  //设置通知栏点击意图,在通知窗口区域，Notification被单击时的响应事件由该intent触发

        Notification notification = builder.build();
        notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;  //设置通知栏提醒标志属性
        mNotificationManager.notify(sId++, notification); //发送通知请求
    }

    /**
     * 显示remoteview的自定义通知栏
     */
    private void showSimpleRemoteViewNotification() {
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //获取状态通知栏管理
        //先设定RemoteViews
        RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.layout_notification);
        remoteView.setTextViewText(R.id.msg, "titile:" + sId);
        remoteView.setImageViewResource(R.id.icon, R.mipmap.icon1);
        remoteView.setOnClickPendingIntent(R.id.open_activity2, getDefalutIntent(new Intent(this, DemoActivity_1.class), PendingIntent.FLAG_UPDATE_CURRENT));
        NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());  //为了兼容到2.3版本使用v7或者v4该消息提示Build
        builder.setSmallIcon(R.mipmap.ic_launcher) //设置通知小ICON
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon1))  //设置通知栏里面左边的大图标
                .setTicker("hello world")    //通知首次出现在通知栏，带上升动画效果的
                .setWhen(System.currentTimeMillis()) //通知产生的时间，会在通知信息里显示，一般是系统获取到的时间
//                .setContentTitle("titile") //设置通知栏标题
//                .setContentText("this is notification."+sId) //设置通知栏显示内容
                .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级
                .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS)
                .setLights(0xff00ff00, 300, 1000)
                .setOngoing(false)//ture，设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
                //  .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
                //  .setDeleteIntent()  //当用户点击全部清除按钮时，响应该清除事件的Intent
                //  .setFullScreenIntent() //响应紧急状态的全屏事件（例如来电事件），也就是说通知来的时候，跳过在通知区域点击通知这一步，直接执行fullScreenIntent代表的事件
                .setContent(remoteView)  //自定义通知栏布局，2.3版本以上可以这样build的方式创建，而2.3版本的确不行只能notification.contentView = remoteView
                .setContentIntent(getDefalutIntent(new Intent(this, DemoActivity_2.class), PendingIntent.FLAG_UPDATE_CURRENT));  //设置通知栏点击意图,在通知窗口区域，Notification被单击时的响应事件由该intent触发
        Notification notification = builder.build();
//        notification.contentView = remoteView;
        notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;  //设置通知栏提醒标志属性
        mNotificationManager.notify(sId++, notification); //发送通知请求
    }


    /**
     * 打开APK程序安装
     * @param file
     */
    private void openFile(File file) {
        // TODO Auto-generated method stub
        Log.e("OpenFile", file.getName());
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction(android.content.Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(file),
                "application/vnd.android.package-archive");
        startActivity(intent);
    }
}
